//package com.jackstraw.jack_base.datasource.jpa.entity.mapstruct;
//
//import com.jackstraw.jack_base.datasource.jpa.entity.bo.UserBo;
//import com.jackstraw.jack_base.datasource.jpa.entity.dto.UserDto;
//import com.jackstraw.jack_base.datasource.jpa.entity.po.UserPo;
//import com.jackstraw.jack_base.datasource.jpa.entity.vo.UserVo;
//import com.jackstraw.jack_base.util.entity.mapstruct.BasicMapstructMapper;
//import com.jackstraw.jack_base.util.entity.mapstruct.DateMapper;
//import org.mapstruct.Mapper;
//import org.mapstruct.MappingTarget;
//import org.mapstruct.Mappings;
//import org.mapstruct.factory.Mappers;
//import org.springframework.beans.factory.annotation.Autowired;
//
//import java.util.Collection;
//
//@Mapper(componentModel = "spring", uses = {DateMapper.class})
//public abstract class UserMapstruct {
//
//    /**
//     * 仅供在非spring场景下使用
//     */
//    public static final UserMapstruct MAPPER = Mappers.getMapper(UserMapstruct.class);
//
//    @Autowired
//    private VoMapstructMapper voMapstructMapper;
//
//    @Autowired
//    private PoMapstructMapper poMapstructMapper;
//
//    @Autowired
//    private DtoMapstructMapper dtoMapstructMapper;
//
//
//    @Mappings(value = {})
//    public abstract UserBo boCopy(UserBo bo);
//
//    @Mappings(value = {})
//    public abstract UserBo boUpdateWithBo(UserBo boSource, @MappingTarget UserBo boTarget);
//
//    @Mappings(value = {})
//    public abstract Collection<UserBo> boBoS(Collection<UserBo> tos);
//
//
//    public <M extends BasicMapstructMapper<UserBo, To>, To> M basicMapstructMapper(Class<To> toClass) {
//        if (getVoClass().equals(toClass)) {
//            return (M) getVoMapstructMapper();
//        }
//        if (getPoClass().equals(toClass)) {
//            return (M) getPoMapstructMapper();
//        }
//
//        if (getDtoClass().equals(toClass)) {
//            return (M) getDtoMapstructMapper();
//        }
//        throw new IllegalArgumentException("没有找到类文件[" + toClass.getName() + "]对应的MapstructMapper");
//    }
//
//
//    public VoMapstructMapper getVoMapstructMapper() {
//        return voMapstructMapper;
//    }
//
//    public PoMapstructMapper getPoMapstructMapper() {
//        return poMapstructMapper;
//    }
//
//    public DtoMapstructMapper getDtoMapstructMapper() {
//        return dtoMapstructMapper;
//    }
//
//    public Class<UserPo> getPoClass() {
//        return UserPo.class;
//    }
//
//    public Class<UserBo> getBoClass() {
//        return UserBo.class;
//    }
//
//    public Class<UserVo> getVoClass() {
//        return UserVo.class;
//    }
//
//    public Class<UserDto> getDtoClass() {
//        return UserDto.class;
//    }
//
//    @Mapper(componentModel = "spring", uses = {DateMapper.class})
//    public interface VoMapstructMapper extends BasicMapstructMapper<UserBo, UserVo> {
//    }
//
//    @Mapper(componentModel = "spring", uses = {DateMapper.class})
//    public interface PoMapstructMapper extends BasicMapstructMapper<UserBo, UserPo> {
//    }
//
//    @Mapper(componentModel = "spring", uses = {DateMapper.class})
//    public interface DtoMapstructMapper extends BasicMapstructMapper<UserBo, UserDto> {
//
//    }
//
//}
